
"""
这一讲我们来讲一下如何在类中添加信号。也就是自定义信号
自定义信号
pyqtSignal()

"""
from PyQt5.QtCore import *


class MyTypeSignal(QObject):
    sendmsg = pyqtSignal(object)       # 定义一个信号
    # 信号必须需要触发（例如点击等操作，也就是先生成信号，信号才能激活对应槽的函数方法）

    # 当然也可以传递多个参数（这里以3个参数为例）
    sendmsg1 = pyqtSignal(str, int, int)
    # 注意：这里定义了传递了三个参数（并且参数类型也需要注意），那么下面传递的就是三个参数

    def run(self):
        self.sendmsg.emit('Hello PyQt5')

    def run1(self):
        self.sendmsg1.emit('hello', 3, 4)


class MySlot(QObject):

    def get(self, msg):
        print('信息:' + msg)

    def get1(self, msg, a, b):
        print(msg)
        print(a+b)


if __name__ == '__main__':
    send = MyTypeSignal()    # 创建一个信号对象
    slot = MySlot()          # 创建一个槽对象

    # 将信号和对应的槽进行绑定起来（关联起来）
    # 这里要注意的是，我们关联的是信号类当中sendmsg 信号和槽类当中的get方法相互关联
    send.sendmsg.connect(slot.get)
    send.sendmsg1.connect(slot.get1)
    send.run()
    # 具体流程：分别创建信号和槽的类对象->将信号类当中的sendmsg与槽类当中的get方法相关联
    #         然后再触发信号当中的run方法，让信号（sendmsg）发送'Hello PyQt5'的文本信息，
    #         这个文本信息就是传入槽（get方法）的变量。

    send.run1()
    # 将信号和槽断开
    send.sendmsg.disconnect(slot.get)    # 这样是将信号和槽相互断开


# 整理： 我们分别定义了信号类和槽类，
#       信号类当中我们通过定义一个信号pyqtSignal(object)变量，当然信号变量中可以传递多个参数
#           另外信号类当中还需要定义一个信号发送方法（也就是生成信号的参数）
#       槽类当中主要就是定义一个信号需要执行的方法。用于后面将信号和槽相连接
#       主函数（定义），分别生成信号对象和槽对象，同时将信号和槽相连接，以及调用一个信号类当中运行方法
